/*
 * FSWUniCEUB - 2008
 * 
 * Este arquivo é de propriedade da Fábrica de Software do UniCEUB
 * 
 * Para mais informações entre em contato com a coordenação do
 * curso de Ciência da Computação da instituição.
 */

package br.uniceub.fsw.indicadores.dao;

import br.uniceub.fsw.arquitetura.persistencia.dao.BaseDAO;
import br.uniceub.fsw.arquitetura.persistencia.dao.ConstrutorSQL;
import br.uniceub.fsw.indicadores.vo.PlanoMedicaoObjetivoVO;
import java.io.Serializable;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;

/**
 * Data Access Object da entidade PlanoMedicaoObjetivo. Essa classe é responsável por
 * todas as operações de banco de dados relacionadas à entidade.
 * 
 * @author Marcos Mello Nobrega Soares 20136178
 */
public class PlanoMedicaoObjetivoDAO extends BaseDAO<PlanoMedicaoObjetivoVO> {

    @Override
    public void inserir(PlanoMedicaoObjetivoVO entidade) {

        ConstrutorSQL query = new ConstrutorSQL();

        query.append("INSERT INTO TA_PlanoMedicaoObjetivo(CD_PlanoMedicao, CD_Objetivo)");
        query.append("VALUES (?, ?)");

        List<?> parametros = criarParametros(entidade.getCdPlanoMedicao(), entidade.getCdObjetivo());

        executarInsercao(query.toString(), parametros);
    }

    @Override
    public void alterar(PlanoMedicaoObjetivoVO entidade) {        
        return; 
    }

    @Override
    public void excluir(PlanoMedicaoObjetivoVO entidade) {

        ConstrutorSQL query = new ConstrutorSQL();

        query.append("DELETE FROM TA_PlanoMedicaoObjetivo");
        query.append("WHERE CD_PlanoMedicao = ?");
        query.append("AND CD_Objetivo = ?");

        executarAlteracao(query.toString(), criarParametros(entidade.getCdPlanoMedicao(), entidade.getCdObjetivo()));
    }

    @Override
    public PlanoMedicaoObjetivoVO consultarPorId(Serializable id) {        
        return null;
    }

    @Override
    public List<PlanoMedicaoObjetivoVO> consultarPorExemplo(PlanoMedicaoObjetivoVO exemplo) {

        List<PlanoMedicaoObjetivoVO> listaRetorno = null;

        ConstrutorSQL query = new ConstrutorSQL();

        query.append("SELECT * FROM TA_PlanoMedicaoObjetivo T WHERE 1=1");

        mapearQueryParaExemplo(query, exemplo);

        listaRetorno = consultar(query.toString(), recuperarParametros());

        return listaRetorno;
    }

    @Override
    protected PlanoMedicaoObjetivoVO extrairObjetoResultado(ResultSet rs) throws SQLException {

        PlanoMedicaoObjetivoVO entidade = new PlanoMedicaoObjetivoVO();
        
        entidade.setCdPlanoMedicao(new Integer(rs.getInt("CD_PlanoMedicao")));
        entidade.setCdObjetivo(new Integer(rs.getInt("CD_Objetivo")));

        return entidade;
    }

    @Override
    protected void mapearQueryParaExemplo(ConstrutorSQL query, PlanoMedicaoObjetivoVO exemplo) {
        
        if (exemplo.getCdPlanoMedicao() != null) {
            query.append("AND T.CD_PlanoMedicao = ?");
            adicionarParametro(exemplo.getCdPlanoMedicao());
        }
        
        if (exemplo.getCdObjetivo() != null) {
            query.append("AND T.CD_Objetivo = ?");
            adicionarParametro(exemplo.getCdObjetivo());
        }
    }
}
